package com.kexio.security.service;

import java.util.List;

import com.kexio.security.domain.UserRole;

/**
 * 用户角色关联数据访问接口
 * 
 * @author kexio
 */
public interface UserRoleRepository {

    /**
     * 保存用户角色关联
     * @param userRole 用户角色关联实体
     * @return 保存后的实体
     */
    UserRole save(UserRole userRole);

    /**
     * 批量保存用户角色关联
     * @param userRoles 用户角色关联列表
     * @return 保存记录数
     */
    int saveBatch(List<UserRole> userRoles);

    /**
     * 根据用户ID查找角色关联
     * @param userId 用户ID
     * @return 用户角色关联列表
     */
    List<UserRole> findByUserId(Long userId);

    /**
     * 根据角色ID查找用户关联
     * @param roleId 角色ID
     * @return 用户角色关联列表
     */
    List<UserRole> findByRoleId(Long roleId);

    /**
     * 根据用户ID和角色ID查找关联
     * @param userId 用户ID
     * @param roleId 角色ID
     * @return 用户角色关联
     */
    UserRole findByUserIdAndRoleId(Long userId, Long roleId);

    /**
     * 检查用户角色关联是否存在
     * @param userId 用户ID
     * @param roleId 角色ID
     * @return 是否存在
     */
    boolean existsByUserIdAndRoleId(Long userId, Long roleId);

    /**
     * 根据用户ID删除所有角色关联
     * @param userId 用户ID
     * @return 删除记录数
     */
    int deleteByUserId(Long userId);

    /**
     * 根据角色ID删除所有用户关联
     * @param roleId 角色ID
     * @return 删除记录数
     */
    int deleteByRoleId(Long roleId);

    /**
     * 删除用户角色关联
     * @param userId 用户ID
     * @param roleId 角色ID
     * @return 删除记录数
     */
    int deleteByUserIdAndRoleId(Long userId, Long roleId);

    /**
     * 批量删除用户角色关联
     * @param userIds 用户ID列表
     * @return 删除记录数
     */
    int deleteByUserIds(List<Long> userIds);

    /**
     * 批量删除角色用户关联
     * @param roleIds 角色ID列表
     * @return 删除记录数
     */
    int deleteByRoleIds(List<Long> roleIds);
}
